package com.atguigu.rabbitmq.three;

import com.atguigu.rabbitmq.utils.RabbitMqUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;

import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.TimeoutException;

/*
* 消费端测试的效果是：
* 消息在手动应答时是不丢失的，放回队列里面重写消费
* */
public class Task2 {

    public static final String TASK_QUEUE_NAME="ack_queue";

    /*发消息*/
    public static void main(String[] args) throws IOException, TimeoutException {
        Channel channel = RabbitMqUtils.getChannel();
        /*开启消息的发布确认*//*发布确认分为三种：单个确认消息，批量确认消息，异步确认消息*/
        channel.confirmSelect();
        /*声明一个队列
        * 1.队列名称
        * 2.队列里面的消息是否持久化
        * 3.队列里面的消息是否让多个消费者进行共享
        * 4.是否自动删除
        * 5.其他参数，关于延迟消息，死信消息
        * */
        channel.queueDeclare(TASK_QUEUE_NAME, true, false, false, null);
        /*从控制台里面输入信息*/
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String message = scanner.next();
            /*生产者通过信道将消息发出去*/
            /*
            * 1.交换机
            * 2.队列名称
            * 3.其他参数,比如以写上消息可的属性持久化，将消息保存到磁盘里面
            * 4.将消息转换为二进制
            * */
            /*设置生产者发送消息为持久化消息(要求保存到磁盘上面)，保存到内存里面*/
            /*第三个参数就是设置的是将消息保存到磁盘上面*/
            channel.basicPublish("", TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes("UTF-8"));
            System.out.println("生产者发出消息："+message);
        }
    }

}